<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /* for (var i = 0; i < 5; i++) {
            console.log(i);
        } */

        /* for (var i = 0; i < 5; i++) {
            setTimeout(function () {
                console.log(i);
            }, 1000 * i);
        } */

        /* for (var i = 0; i < 5; i++) {
            (function (i) {
                setTimeout(function () {
                    // 一个函数使用了外部函数的局部变量
                    console.log(i);
                }, i * 1000);
            })(i);
        } */

        /* for (var i = 0; i < 5; i++) {
            (function () {
                setTimeout(function () {
                    console.log(i);
                }, i * 1000);
            })(i);
        } */
        /* for (var i = 0; i < 5; i++) {
            setTimeout((function (i) {
                return function () {
                    console.log(i);
                }
            })(i), i * 1000);
        } */
        /* for (var i = 0; i < 5; i++) {
            // 立即执行函数上来就会走，根本不受时间的控制，所以每次 for 循环，立即执行函数就会马上执行，并且传递过了当前循环时候的 i
            setTimeout((function (i) {
                console.log(i)
                return function () {
                    // 产生了闭包，就是循环时候的那个 i
                    console.log(i);
                }
            })(i), i * 1000); // i * 1000 跟着 for 循环走的
        } */

        /* setTimeout((function () {
            console.log(3)
        })(), 3000) */
    </script>
</body>

</html>